package com.sihai.ehr.service;

import java.util.List;

import com.sihai.core.Limit;
import com.sihai.core.LimitedList;
import com.sihai.core.Sorter;
import com.sihai.ehr.model.biz.EmployeeWorkExperience;
import com.sihai.ehr.model.biz.EmployeeinfoBase;
import com.sihai.ehr.model.biz.EmployeeinfoEducation;
import com.sihai.ehr.model.biz.EmployeeinfoFamily;
import com.sihai.ehr.model.biz.EmployeeinfoTrain;
import com.sihai.ehr.model.biz.EmployeeinfoWork;

/**
 * 员工资料服务
 * 
 * @author henry
 * 
 */
public interface EmployeeinfoService {

	/****************************************
	 * -----------员工基本资料模块----------------
	 ****************************************/
	/**
	 * 获取员工基本资料信息
	 * 
	 * @param id
	 *            : 员工主健ID
	 */
	EmployeeinfoBase getEmployeeinfoBase(Long id);

	/**
	 * 获取员工姓名查询基本资料信息列表
	 * 
	 * @param name 员工姓名
	 * @param state 员工状态
	 * @param limit
	 * @param sorter
	 * @return
	 */
	List<EmployeeinfoBase> searchEmployeebaseinfos(String name, String state,
			Limit limit, Sorter sorter);

	/**
	 * 查询限制条件下的员工基本信息
	 * 
	 * @param employeeinfoBase
	 * @param limit
	 * @param sorter
	 * @return
	 */
	LimitedList<EmployeeinfoBase> searchEmployeebaseinfos(
			EmployeeinfoBase employeeinfoBase, Limit limit, Sorter sorter);

	/**
	 * 保存员工基本资料信息
	 * 
	 * @param employeeinfoBase
	 *            : 员工基本信息对象
	 */
	void saveEmployeeinfoBase(EmployeeinfoBase employeeinfoBase);

	/**
	 * 移除员工基本信息
	 * 
	 * @param employeebaseinfoIds
	 *            ： 需要移除的员工信息ID集合
	 */
	void removeEmployeeinfoBase(String employeebaseinfoIds);

	/****************************************
	 * -----------员工教育情况模块----------------
	 ****************************************/

	/**
	 * 获取员工教育单元情况
	 * 
	 * @param id
	 *            员工教育信息ID
	 * @return 员工教育单元信息
	 */
	EmployeeinfoEducation getEmployeeinfoEducation(Long id);

	/**
	 * 获取员工教育情况列表
	 * 
	 * @param employeeInfoId
	 *            员工信息ID
	 * @param limit
	 * @param sorter
	 * 
	 * @return 员工教育情况列表
	 */
	List<EmployeeinfoEducation> searchEmployeeinfoEducations(
			Long employeeInfoId, Limit limit, Sorter sorter);

	/**
	 * 获取限制条件下的员工教育信息
	 * 
	 * @param employeeinfoEducation
	 * @param limit
	 * @param sorter
	 * @return
	 */
	LimitedList<EmployeeinfoEducation> searchEmployeeinfoEducations(
			EmployeeinfoEducation employeeinfoEducation, Limit limit,
			Sorter sorter);

	/**
	 * 保存员工教育情况
	 * 
	 * @param employeeinfoEducation
	 */
	void saveEmployeeInfoEducation(EmployeeinfoEducation employeeinfoEducation);

	/**
	 * 移除员工教育情况
	 * 
	 * @param employeeEducationIds
	 *            员工教育情况ID集合
	 */
	void removeEmployeeInfoEducationByIds(String employeeEducationIds);

	/**
	 * 移除指定员工的教育情况
	 * 
	 * @param employeeInfoId
	 *            员工信息ID
	 */
	void removeEmployeeInfoEducationByEmployeeinfobaseId(Long employeeInfoId);

	/****************************************
	 * -----------员工培训情况模块----------------
	 ****************************************/

	/**
	 * 获取员工培训单元情况
	 * 
	 * @param id
	 * @return
	 */
	EmployeeinfoTrain getEmployeeinfoTrain(Long id);

	/**
	 * 获取员工培训信息列表
	 * 
	 * @param employeeInfoId
	 *            员工信息ID
	 * @param limit
	 * @param sorter
	 * @return
	 */
	List<EmployeeinfoTrain> searchEmployeeinfoTrains(Long employeeInfoId,
			Limit limit, Sorter sorter);

	/**
	 * 获取员工限制条件下的培训信息列表
	 * 
	 * @param employeeinfoTrain
	 * @param limit
	 * @param sorter
	 * @return
	 */
	LimitedList<EmployeeinfoTrain> searchEmployeeinfoTrains(
			EmployeeinfoTrain employeeinfoTrain, Limit limit, Sorter sorter);

	/**
	 * 保存员工培训信息
	 * 
	 * @param employeeinfoTrain
	 *            员工培训信息对象
	 */
	void saveEmployeeinfoTrain(EmployeeinfoTrain employeeinfoTrain);

	/**
	 * 移除员工培训信息
	 * 
	 * @param employeeinfotrainIds
	 *            员工培训信息ID集合
	 */
	void removeEmployeeinfoTrainByIds(String employeeinfotrainIds);

	/**
	 * 移除指定员工的培训信息
	 * 
	 * @param employeeInfoId
	 *            员工信息ID
	 * @param limit
	 * @param sorter
	 * 
	 */
	void removeEmployeeinfoTrainByEmployeeinfobaseId(Long employeeInfoId,
			Limit limit, Sorter sorter);

	/****************************************
	 * -----------员工工作经验模块----------------
	 ****************************************/
	/**
	 * 获取员工工作经验单元信息
	 * 
	 * @param id
	 *            工作经验ID
	 * @return
	 */
	EmployeeWorkExperience getEmployeeWorkExperience(Long id);

	/**
	 * 获取员工工作经验信息列表
	 * 
	 * @param employeeInfoId
	 *            员工信息ID
	 * @param limit
	 * @param sorter
	 * 
	 * @return
	 */
	List<EmployeeWorkExperience> searchEmployeeWorkExperiences(
			Long employeeInfoId, Limit limit, Sorter sorter);

	/**
	 * 获取员工限制条件下的工作经验信息列表
	 * 
	 * @param employeeWorkExperience
	 *            工作经验对象
	 * @param limit
	 * @param sorter
	 * @return
	 */
	LimitedList<EmployeeWorkExperience> searchEmployeeWorkExperiences(
			EmployeeWorkExperience employeeWorkExperience, Limit limit,
			Sorter sorter);

	/**
	 * 保存员工工作经验信息
	 * 
	 * @param employeeWorkExperience
	 */
	void saveEmployeeWorkExperience(
			EmployeeWorkExperience employeeWorkExperience);

	/**
	 * 移除员工工作经验信息
	 * 
	 * @param employeeWorkExperienceIds
	 *            员工工作经验ID集合
	 */
	void removeEmployeeWorkExperienceByIds(String employeeWorkExperienceIds);

	/**
	 * <h2>移除员工工作经验信息</h2>
	 * <p>
	 * 根据员工基本信息ID移除此员工相关的工作经验信息
	 * </p>
	 * 
	 * @param employeeInfoId
	 *            员工基本信息ID
	 */
	void removeEmployeeWorkExperienceByEmployeeinfobaseId(Long employeeInfoId);

	/****************************************
	 * -----------员工家庭情况模块----------------
	 ****************************************/
	/**
	 * 获取员工家庭单元情况信息
	 * 
	 * @param id
	 * @return
	 */
	EmployeeinfoFamily getEmployeeinfoFamily(Long id);

	/**
	 * 获取员工家庭情况信息
	 * 
	 * @param employeeInfoId
	 *            员工信息ID
	 * @param limit
	 * @param sorter
	 * @return
	 */
	List<EmployeeinfoFamily> searchEmployeeinfoFamilies(Long employeeInfoId,
			Limit limit, Sorter sorter);

	/**
	 * 获取员工限制条件下的家庭情况信息
	 * 
	 * @param employeeinfoFamily
	 * @param limit
	 * @param sorter
	 * @return
	 */
	LimitedList<EmployeeinfoFamily> searchEmployeeinfoFamilies(
			EmployeeinfoFamily employeeinfoFamily, Limit limit, Sorter sorter);

	/**
	 * 保存员工家庭情况信息
	 * 
	 * @param employeeinfoFamily
	 *            员工家庭单元信息对象
	 */
	void saveEmployeeinfoFamily(EmployeeinfoFamily employeeinfoFamily);

	/**
	 * 移除员工家庭情况信息
	 * 
	 * @param employeeinfoFamilyIds
	 *            家庭情况ID集合
	 */
	void removeEmployeeinfoFamilyByIds(String employeeinfoFamilyIds);

	/**
	 * 移除员工家庭情况信息
	 * 
	 * @param employeeInfoId
	 *            员工信息ID
	 */
	void removeEmployeeinfoFamilyByEmployeeinfobaseId(Long employeeInfoId);

	/****************************************
	 * -----------员工任职情况模块----------------
	 ****************************************/
	/**
	 * 获取员工任职单元信息
	 * 
	 * @param id
	 * @return
	 */
	EmployeeinfoWork getEmployeeinfoWork(Long id);

	/**
	 * 获取员工任职情况列表
	 * 
	 * @param employeeInfoId
	 *            员工信息ID
	 * @param limit
	 * @param sorter
	 * @return
	 */
	List<EmployeeinfoWork> searchEmployeeinfoWorks(Long employeeInfoId,
			Limit limit, Sorter sorter);

	/**
	 * 获取员工限制条件下的任职情况列表
	 * 
	 * @param employeeinfoWork
	 * @param limit
	 * @param sorter
	 * @return
	 */
	LimitedList<EmployeeinfoWork> searchEmployeeinfoWorks(
			EmployeeinfoWork employeeinfoWork, Limit limit, Sorter sorter);

	/**
	 * 保存员工任职情况信息
	 * 
	 * @param employeeinfoWork
	 *            员工任职信息对象
	 */
	void saveEmployeeinfoWork(EmployeeinfoWork employeeinfoWork);

	/**
	 * <pre>
	 * 移除员工任职信息 <i>根据员工任职表的ID集合</i>
	 * </pre>
	 * 
	 * @param employeeinfoWorkIds
	 *            员工任职情况ID集合
	 */
	void removeEmployeeinfoWorkByIds(String employeeinfoWorkIds);

	/**
	 * 移除员工任职情况信息
	 * 
	 * @param employeeInfoId
	 *            员工ID
	 */
	void removeEmployeeinfoWorkByEmployeeinfobaseId(Long employeeInfoId);

	/****************************************
	 * -----------员工组合查询模块---------------- 例如：查询员工的职务及基本信息
	 ****************************************/

	/**
	 * 查询员工组织信息
	 * 
	 * @param sql
	 * @param limit
	 * @param sorter
	 * @return
	 */
	List<Object> queryEmployeeUnionInfo(String sql, Limit limit, Sorter sorter);
}
